/**
 * 日期工具类
 */

/**
 * 格式化日期时间
 * @param {Date} date 日期对象
 * @param {Boolean} showSeconds 是否显示秒
 * @returns {String} 格式化后的日期时间字符串
 */
function formatDateTime(date, showSeconds = false) {
  if (!date) return '';
  
  const year = date.getFullYear();
  const month = padZero(date.getMonth() + 1);
  const day = padZero(date.getDate());
  const hours = padZero(date.getHours());
  const minutes = padZero(date.getMinutes());
  
  if (showSeconds) {
    const seconds = padZero(date.getSeconds());
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  }
  
  return `${year}-${month}-${day} ${hours}:${minutes}`;
}

/**
 * 格式化日期
 * @param {Date} date 日期对象
 * @returns {String} 格式化后的日期字符串
 */
function formatDate(date) {
  if (!date) return '';
  
  const year = date.getFullYear();
  const month = padZero(date.getMonth() + 1);
  const day = padZero(date.getDate());
  
  return `${year}-${month}-${day}`;
}

/**
 * 格式化时间
 * @param {Date} date 日期对象
 * @param {Boolean} showSeconds 是否显示秒
 * @returns {String} 格式化后的时间字符串
 */
function formatTime(date, showSeconds = true) {
  if (!date) return '';
  
  const hours = padZero(date.getHours());
  const minutes = padZero(date.getMinutes());
  
  if (showSeconds) {
    const seconds = padZero(date.getSeconds());
    return `${hours}:${minutes}:${seconds}`;
  }
  
  return `${hours}:${minutes}`;
}

/**
 * 格式化为友好时间
 * @param {Date|String} date 日期对象或日期字符串
 * @returns {String} 友好时间，如"刚刚"、"5分钟前"、"2小时前"等
 */
function formatFriendlyTime(date) {
  if (!date) return '';
  
  if (typeof date === 'string') {
    date = new Date(date);
  }
  
  const now = new Date();
  const diff = Math.floor((now - date) / 1000); // 时间差，单位：秒
  
  if (diff < 60) {
    return '刚刚';
  } else if (diff < 3600) {
    return Math.floor(diff / 60) + '分钟前';
  } else if (diff < 86400) {
    return Math.floor(diff / 3600) + '小时前';
  } else if (diff < 2592000) {
    return Math.floor(diff / 86400) + '天前';
  } else if (diff < 31536000) {
    return Math.floor(diff / 2592000) + '个月前';
  } else {
    return Math.floor(diff / 31536000) + '年前';
  }
}

/**
 * 获取某月的天数
 * @param {Number} year 年份
 * @param {Number} month 月份，1-12
 * @returns {Number} 该月的天数
 */
function getDaysInMonth(year, month) {
  return new Date(year, month, 0).getDate();
}

/**
 * 数字补零
 * @param {Number} num 需要补零的数字
 * @returns {String} 补零后的字符串
 */
function padZero(num) {
  return num < 10 ? '0' + num : '' + num;
}

/**
 * 判断是否为同一天
 * @param {Date} date1 日期1
 * @param {Date} date2 日期2
 * @returns {Boolean} 是否为同一天
 */
function isSameDay(date1, date2) {
  return date1.getFullYear() === date2.getFullYear() &&
         date1.getMonth() === date2.getMonth() &&
         date1.getDate() === date2.getDate();
}

/**
 * 获取两个日期之间的天数
 * @param {Date} date1 日期1
 * @param {Date} date2 日期2
 * @returns {Number} 天数差
 */
function getDaysBetween(date1, date2) {
  const oneDay = 24 * 60 * 60 * 1000; // 一天的毫秒数
  const time1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()).getTime();
  const time2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate()).getTime();
  return Math.abs(Math.round((time1 - time2) / oneDay));
}

module.exports = {
  formatDateTime,
  formatDate,
  formatTime,
  formatFriendlyTime,
  getDaysInMonth,
  isSameDay,
  getDaysBetween,
  padZero
}; 